#include "lcd_init.h"
#include "stdio.h"
#include <string.h>
// #include "app.h"

#define LCD_X 400
#define LCD_Y 960
int VPW = 8, VND = 24, VST = 8;
int HPW = 8, HND = 24, HST = 88;
unsigned char LT7583_GPIOA = 0x78;            // LCD's [SDO,SDI,CLK,CS,RST]
unsigned char image_buff[1 + 36000] = {0x80}; // 400*3*30=36000

typedef void (*FunType)(void);

extern SPI_HandleTypeDef hspi1;
//**********************************write function begin********************************************
/*********LT7583 INITIAL **********/
void wr_cmd_4spi_8bcs(uint8_t par)
{
    uint8_t cmd_buf[2];
    LT7583_CSLow();
    cmd_buf[0] = 0x00;
    cmd_buf[1] = par;
    HAL_SPI_Transmit(&hspi1, cmd_buf, 2, HAL_MAX_DELAY);
    LT7583_CSHigh();
}
void wr_dat_4spi_8bcs(uint8_t par)
{
    uint8_t cmd_buf[2];
    LT7583_CSLow();
    cmd_buf[0] = 0x80;
    cmd_buf[1] = par;
    HAL_SPI_Transmit(&hspi1, cmd_buf, 2, HAL_MAX_DELAY);
    LT7583_CSHigh();
}

void wr_disp_begin(void)
{
    uint8_t cmd_flag = 0x80;
    LT7583_CSLow();
    HAL_SPI_Transmit(&hspi1, &cmd_flag, 1, HAL_MAX_DELAY);
}

void wr_disp_data(uint8_t par)
{
    uint8_t cmd_data = par;
    HAL_SPI_Transmit(&hspi1, &cmd_data, 1, HAL_MAX_DELAY);
}

void LT7583_Set_Register(uint8_t reg, uint8_t cmd)
{
    wr_cmd_4spi_8bcs(reg);
    wr_dat_4spi_8bcs(cmd);
}

void LT7583_Initial(void)
{
    /*-------- PLL Setting --------*/
    // PCLK=12*(M/N)/OD=12*(48/2)/8=36M ,[12.5,100]
    LT7583_Set_Register(0x05, (3 << 6) | (0 << 5) | (2 << 1)); // OD=8 ,N=2
    LT7583_Set_Register(0x06, 48);                             // M=48

    // MCLK=12*(M/N)/OD=12*(40/2)/2=120M ,[25,180]
    LT7583_Set_Register(0x07, (1 << 6) | (0 << 5) | (2 << 1)); // OD=2 ,N=2
    LT7583_Set_Register(0x08, 40);                             // M=40

    // CCLK=12*(M/N)/OD=12*(40/2)/2=120M ,[25,170]
    LT7583_Set_Register(0x09, (1 << 6) | (0 << 5) | (2 << 1)); // OD=2 ,N=2
    LT7583_Set_Register(0x0A, 40);                             // M=40

    LT7583_Set_Register(0x00, 0x80); // Re-Config PLL

    LT7583_Set_Register(0x01, 0x00); // 24bit TFT

    /*-------- Display Memory Setting --------*/
    LT7583_Set_Register(0xE0, 0x29);
    LT7583_Set_Register(0xE1, 0x03);
    LT7583_Set_Register(0xE2, 0x53);
    LT7583_Set_Register(0xE3, 0x07);
    LT7583_Set_Register(0xE4, 0x01);

    /*-------- LCD Timing Setting --------*/
    // LCD's Width=(HDWR+1)*8+HDWFTR
    LT7583_Set_Register(0x14, LCD_X / 8 - 1); // HDWR[7..0]
    LT7583_Set_Register(0x15, LCD_X % 8);     // HDWFTR[2..0]

    // LCD's HND=(HNDR+1)*8+HNDFTR
    LT7583_Set_Register(0x16, HND / 8 - 1); // HNDR[5..0]
    LT7583_Set_Register(0x17, HND % 8);     // HNDFTR[3..0]

    // LCD's HST=HSTR+1
    LT7583_Set_Register(0x18, HST / 8 - 1); // HSTR[4..0]

    // LCD's HPW=(HPWR+1)*8
    LT7583_Set_Register(0x19, HPW / 8 - 1); // HPWR[4..0]

    // LCD's Height=VDHR[10..0]+1
    LT7583_Set_Register(0x1A, (LCD_Y - 1) % 256); // VDHR[7..0]
    LT7583_Set_Register(0x1B, (LCD_Y - 1) / 256); // VDHR[10..8]

    // LCD's VND=VNDR[9..0]+1
    LT7583_Set_Register(0x1C, (VND - 1) % 256); // VNDR[7..0]
    LT7583_Set_Register(0x1D, (VND - 1) / 256); // VNDR[9..8]

    // LCD's VST=VSTR+1
    LT7583_Set_Register(0x1E, VST - 1); // VSTR[7..0]

    // LCD's VPW=VPWR+1
    LT7583_Set_Register(0x1F, VPW - 1); // VPWR[5..0]

    /*-------- LCD Setting --------*/
    LT7583_Set_Register(0x10, 0x08); // Main Image 24bit
    LT7583_Set_Register(0x11, 0x0A); // PiP1/PiP2 Image 24bit
    LT7583_Set_Register(0x12, 0x00); // Display OFF ,R-->G-->B
    LT7583_Set_Register(0x13, 0x00); //

    /*-------- Display Window Setting --------*/
    // MISA[31..0]
    LT7583_Set_Register(0x20, (0 >> 0) & 0xff);  //[7..0]
    LT7583_Set_Register(0x21, (0 >> 8) & 0xff);  //[15..8]
    LT7583_Set_Register(0x22, (0 >> 16) & 0xff); //[23..16]
    LT7583_Set_Register(0x23, (0 >> 24) & 0xff); //[31..24]

    // MIW[13..0]
    LT7583_Set_Register(0x24, LCD_X % 256); //[7..0]
    LT7583_Set_Register(0x25, LCD_X / 256); //[13..8]

    // MIULX[12..0]
    LT7583_Set_Register(0x26, 0 % 256); //[7..0]
    LT7583_Set_Register(0x27, 0 / 256); //[12..8]

    // MIULY[12..0]
    LT7583_Set_Register(0x28, 0 % 256); //[7..0]
    LT7583_Set_Register(0x29, 0 / 256); //[12..8]

    /*-------- Canvas Setting --------*/
    // CVSSA[31..0]
    LT7583_Set_Register(0x50, (0 >> 0) & 0xff);  //[7..0]
    LT7583_Set_Register(0x51, (0 >> 8) & 0xff);  //[15..8]
    LT7583_Set_Register(0x52, (0 >> 16) & 0xff); //[23..16]
    LT7583_Set_Register(0x53, (0 >> 24) & 0xff); //[31..24]

    // CVS_IMWTH[13..0]
    LT7583_Set_Register(0x54, LCD_X % 256); //[7..0]
    LT7583_Set_Register(0x55, LCD_X / 256); //[13..8]

    // AWUL_X[12..0]
    LT7583_Set_Register(0x56, 0 % 256); //[7..0]
    LT7583_Set_Register(0x57, 0 / 256); //[12..8]

    // AWUL_Y[12..0]
    LT7583_Set_Register(0x58, 0 % 256); //[7..0]
    LT7583_Set_Register(0x59, 0 / 256); //[12..8]

    // AW_WTH[13..0]
    LT7583_Set_Register(0x5A, LCD_X % 256); //[7..0]
    LT7583_Set_Register(0x5B, LCD_X / 256); //[13..8]

    // AW_HT[13..0]
    LT7583_Set_Register(0x5C, LCD_Y % 256); //[7..0]
    LT7583_Set_Register(0x5D, LCD_Y / 256); //[13..8]

    LT7583_Set_Register(0x5E, 0x02); // Block mode ,Canvas Image 24bit

    // CURH[12..0]
    LT7583_Set_Register(0x5F, 0 % 256); //[7..0]
    LT7583_Set_Register(0x60, 0 / 256); //[12..8]

    // CURV[12..0]
    LT7583_Set_Register(0x61, 0 % 256); //[7..0]
    LT7583_Set_Register(0x62, 0 / 256); //[12..8]

    /*-------- PWM1 Setting(CCLK=120M) --------*/
    LT7583_Set_Register(0x84, 14);   // fTimer=120/15=8M
    LT7583_Set_Register(0x85, 0xC8); // PWM1 ,Timer1=8M/8=1M

    // TCMPB1
    LT7583_Set_Register(0x8C, 20 % 256); //[7..0]
    LT7583_Set_Register(0x8D, 20 / 256); //[15..8]

    // TCNTB1
    LT7583_Set_Register(0x8E, 100 % 256); //[7..0]
    LT7583_Set_Register(0x8F, 100 / 256); //[15..8]

    LT7583_Set_Register(0x86, 0x30); // PWM1 Auto re-load ,Run

    /*-------- GPIOA Setting --------*/
    LT7583_Set_Register(0xF0, 0x87); // 8b'10000111 ,Input[7],Output[6..3],Input[2..0]
    LT7583_Set_Register(0xF1, 0x78); //

    /*-------- Initial End --------*/
    LT7583_Set_Register(0x12, 0x40);
}
/*********LCD initial**********/
void LCD_SDAHigh(void)
{
    LT7583_GPIOA |= 0x40;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_SDALow(void)
{
    LT7583_GPIOA &= 0xbf;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_SCLHigh(void)
{
    LT7583_GPIOA |= 0x20;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_SCLLow(void)
{
    LT7583_GPIOA &= 0xdf;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_CSHigh(void)
{
    LT7583_GPIOA |= 0x10;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_CSLow(void)
{
    LT7583_GPIOA &= 0xef;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_RSTHigh(void)
{
    LT7583_GPIOA |= 0x08;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void LCD_RSTLow(void)
{
    LT7583_GPIOA &= 0xf7;
    LT7583_Set_Register(0xF1, LT7583_GPIOA);
}

void ST7701S_Set_Register(unsigned char cmd_dat, unsigned char data)
{
    LCD_CSLow();

    LCD_SCLLow();
    if (cmd_dat)
    {
        LCD_SDAHigh();
    }
    else
    {
        LCD_SDALow();
    }
    LCD_SCLHigh();

    for (uint8_t i = 0; i < 8; i++)
    {
        LCD_SCLLow();
        if (data & 0x80)
        {
            LCD_SDAHigh();
        }
        else
        {
            LCD_SDALow();
        }
        LCD_SCLHigh();
        data <<= 1;
    }
    LCD_CSHigh();
}

void ST7701S_Initial(void)
{
    LCD_SCLLow();
    LCD_RSTLow();
    HAL_Delay(1);
    LCD_RSTHigh();
    HAL_Delay(120);

    ST7701S_Set_Register(0, 0x3A); // COLMOD
    ST7701S_Set_Register(1, 0x70); // 24bit/pixel

    ST7701S_Set_Register(0, 0xC3); // RGBCTRL
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0xFF);
    ST7701S_Set_Register(1, 0x77);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x13);

    ST7701S_Set_Register(0, 0xEF);
    ST7701S_Set_Register(1, 0x08);

    ST7701S_Set_Register(0, 0xFF);
    ST7701S_Set_Register(1, 0x77);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x10);

    ST7701S_Set_Register(0, 0xC0); // LNESET
    ST7701S_Set_Register(1, 0x77); //(119+1)*8=960
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0xC1);
    ST7701S_Set_Register(1, 0x0E);
    ST7701S_Set_Register(1, 0x0C);

    ST7701S_Set_Register(0, 0xC2);
    ST7701S_Set_Register(1, 0x07);
    ST7701S_Set_Register(1, 0x02);

    ST7701S_Set_Register(0, 0xCC);
    ST7701S_Set_Register(1, 0x30);

    ST7701S_Set_Register(0, 0xB0);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x17);
    ST7701S_Set_Register(1, 0x1F);
    ST7701S_Set_Register(1, 0x0E);
    ST7701S_Set_Register(1, 0x11);
    ST7701S_Set_Register(1, 0x06);
    ST7701S_Set_Register(1, 0x0D);
    ST7701S_Set_Register(1, 0x08);
    ST7701S_Set_Register(1, 0x07);
    ST7701S_Set_Register(1, 0x26);
    ST7701S_Set_Register(1, 0x03);
    ST7701S_Set_Register(1, 0x11);
    ST7701S_Set_Register(1, 0x0F);
    ST7701S_Set_Register(1, 0x2A);
    ST7701S_Set_Register(1, 0x31);
    ST7701S_Set_Register(1, 0x1C);

    ST7701S_Set_Register(0, 0xB1);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x17);
    ST7701S_Set_Register(1, 0x1F);
    ST7701S_Set_Register(1, 0x0D);
    ST7701S_Set_Register(1, 0x11);
    ST7701S_Set_Register(1, 0x07);
    ST7701S_Set_Register(1, 0x0C);
    ST7701S_Set_Register(1, 0x08);
    ST7701S_Set_Register(1, 0x08);
    ST7701S_Set_Register(1, 0x26);
    ST7701S_Set_Register(1, 0x04);
    ST7701S_Set_Register(1, 0x11);
    ST7701S_Set_Register(1, 0x0F);
    ST7701S_Set_Register(1, 0x2A);
    ST7701S_Set_Register(1, 0x31);
    ST7701S_Set_Register(1, 0x1C);

    ST7701S_Set_Register(0, 0xFF);
    ST7701S_Set_Register(1, 0x77);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x11);

    ST7701S_Set_Register(0, 0xB0);
    ST7701S_Set_Register(1, 0x5C);

    ST7701S_Set_Register(0, 0xB1);
    ST7701S_Set_Register(1, 0x68);

    ST7701S_Set_Register(0, 0xB2);
    ST7701S_Set_Register(1, 0x85);

    ST7701S_Set_Register(0, 0xB3);
    ST7701S_Set_Register(1, 0x80);

    ST7701S_Set_Register(0, 0xB5);
    ST7701S_Set_Register(1, 0x49);

    ST7701S_Set_Register(0, 0xB7);
    ST7701S_Set_Register(1, 0x87);

    ST7701S_Set_Register(0, 0xB8);
    ST7701S_Set_Register(1, 0x22);

    ST7701S_Set_Register(0, 0xB9);
    ST7701S_Set_Register(1, 0x10);
    ST7701S_Set_Register(1, 0x1F);

    ST7701S_Set_Register(0, 0xBB);
    ST7701S_Set_Register(1, 0x03);

    ST7701S_Set_Register(0, 0xC1); // PORCTRL
    ST7701S_Set_Register(1, VND);  // VBP
    ST7701S_Set_Register(1, VST);  // VFP

    ST7701S_Set_Register(0, 0xC2);
    ST7701S_Set_Register(1, 0x88);

    ST7701S_Set_Register(0, 0xD0);
    ST7701S_Set_Register(1, 0x88);

    ST7701S_Set_Register(0, 0xE0);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x02);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x0C);

    ST7701S_Set_Register(0, 0xE1);
    ST7701S_Set_Register(1, 0x03);
    ST7701S_Set_Register(1, 0x96);
    ST7701S_Set_Register(1, 0x05);
    ST7701S_Set_Register(1, 0x96);
    ST7701S_Set_Register(1, 0x02);
    ST7701S_Set_Register(1, 0x96);
    ST7701S_Set_Register(1, 0x04);
    ST7701S_Set_Register(1, 0x96);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x44);
    ST7701S_Set_Register(1, 0x44);

    ST7701S_Set_Register(0, 0xE2);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x03);
    ST7701S_Set_Register(1, 0x03);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x02);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x02);
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0xE3);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x33);
    ST7701S_Set_Register(1, 0x33);

    ST7701S_Set_Register(0, 0xE4);
    ST7701S_Set_Register(1, 0x44);
    ST7701S_Set_Register(1, 0x44);

    ST7701S_Set_Register(0, 0xE5);
    ST7701S_Set_Register(1, 0x0B);
    ST7701S_Set_Register(1, 0xD4);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);
    ST7701S_Set_Register(1, 0x0D);
    ST7701S_Set_Register(1, 0xD6);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);
    ST7701S_Set_Register(1, 0x07);
    ST7701S_Set_Register(1, 0xD0);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);
    ST7701S_Set_Register(1, 0x09);
    ST7701S_Set_Register(1, 0xD2);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);

    ST7701S_Set_Register(0, 0xE6);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x33);
    ST7701S_Set_Register(1, 0x33);

    ST7701S_Set_Register(0, 0xE7);
    ST7701S_Set_Register(1, 0x44);
    ST7701S_Set_Register(1, 0x44);

    ST7701S_Set_Register(0, 0xE8);
    ST7701S_Set_Register(1, 0x0A);
    ST7701S_Set_Register(1, 0xD5);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);
    ST7701S_Set_Register(1, 0x0C);
    ST7701S_Set_Register(1, 0xD7);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);
    ST7701S_Set_Register(1, 0x06);
    ST7701S_Set_Register(1, 0xD1);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);
    ST7701S_Set_Register(1, 0x08);
    ST7701S_Set_Register(1, 0xD3);
    ST7701S_Set_Register(1, 0x28);
    ST7701S_Set_Register(1, 0x8C);

    ST7701S_Set_Register(0, 0xEB);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0xE4);
    ST7701S_Set_Register(1, 0xE4);
    ST7701S_Set_Register(1, 0x44);
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0xED);
    ST7701S_Set_Register(1, 0xFF);
    ST7701S_Set_Register(1, 0x45);
    ST7701S_Set_Register(1, 0x67);
    ST7701S_Set_Register(1, 0xFC);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0x3F);
    ST7701S_Set_Register(1, 0xAB);
    ST7701S_Set_Register(1, 0xFF);
    ST7701S_Set_Register(1, 0xFF);
    ST7701S_Set_Register(1, 0xBA);
    ST7701S_Set_Register(1, 0xF3);
    ST7701S_Set_Register(1, 0x10);
    ST7701S_Set_Register(1, 0xCF);
    ST7701S_Set_Register(1, 0x76);
    ST7701S_Set_Register(1, 0x54);
    ST7701S_Set_Register(1, 0xFF);

    ST7701S_Set_Register(0, 0xEF);
    ST7701S_Set_Register(1, 0x10);
    ST7701S_Set_Register(1, 0x0D);
    ST7701S_Set_Register(1, 0x04);
    ST7701S_Set_Register(1, 0x08);
    ST7701S_Set_Register(1, 0x3F);
    ST7701S_Set_Register(1, 0x1F);

    ST7701S_Set_Register(0, 0xFF);
    ST7701S_Set_Register(1, 0x77);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x13);

    ST7701S_Set_Register(0, 0xE8);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x0E);

    ST7701S_Set_Register(0, 0x11);
    HAL_Delay(120);

    ST7701S_Set_Register(0, 0xE8);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x0C);
    HAL_Delay(20);

    ST7701S_Set_Register(0, 0xE8);
    ST7701S_Set_Register(1, 0x40);
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0xFF);
    ST7701S_Set_Register(1, 0x77);
    ST7701S_Set_Register(1, 0x01);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0x29);

    ST7701S_Set_Register(0, 0x36);
    ST7701S_Set_Register(1, 0x00);

    ST7701S_Set_Register(0, 0x35);
    ST7701S_Set_Register(1, 0x00);
}
/**********DISPLAY IMAGE **********/
void LT7583_Write_RAM(unsigned char *src, unsigned int num)
{
    LT7583_CSLow();
    HAL_SPI_Transmit_DMA(&hspi1, src, num);
    LT7583_CSHigh();
}

void fillcolor(uint8_t color_R, uint8_t color_G, uint8_t color_B)
{
    uint8_t eline[1440] = {0};
    for (int i = 0; i < 1440; i += 3)
    {
        eline[i] = color_R;
        eline[i + 1] = color_G;
        eline[i + 2] = color_B;
    }

    wr_cmd_4spi_8bcs(0x04);
    LT7583_CSLow();
    for (uint8_t i = 0; i < LCD_Y; i++)
    {
        HAL_SPI_Transmit_DMA(&hspi1, eline, 1440);
    }
    LT7583_CSHigh();
}

void LT7583_Display_Test(void)
{
    int k, m;
    unsigned char area_color[2][4][3] = {
        {{255, 0, 0},
         {0, 0, 255},
         {255, 0, 255},
         {255, 128, 0}},
        {{0, 255, 0},
         {255, 255, 0},
         {0, 255, 255},
         {255, 128, 192}}};

    wr_cmd_4spi_8bcs(0x04);

    for (m = 0; m < 4; m++)
    {
        for (k = 0; k < LCD_X * 30; k++)
        {
            image_buff[3 * k + 1] = area_color[k % LCD_X * 2 / LCD_X][m][2];
            image_buff[3 * k + 2] = area_color[k % LCD_X * 2 / LCD_X][m][1];
            image_buff[3 * k + 3] = area_color[k % LCD_X * 2 / LCD_X][m][0];
        }

        for (k = 0; k < 8; k++)
            LT7583_Write_RAM(image_buff, 36001);
    }
}

void initial(void)
{
    LT7583_Initial();
    ST7701S_Initial();
    /*
    while (1)
    {
        //fillcolor(0xFF,0x00,0x00);
        //HAL_Delay(1000);

        fillcolor(0x00, 0xFF, 0x00);
        HAL_Delay(1000);

        fillcolor(0x00, 0x00, 0xFF);
        HAL_Delay(1000);

        fillcolor(0xFF, 0xFF, 0xFF);
        HAL_Delay(1000);

        fillcolor(0x00, 0x00, 0x00);
        HAL_Delay(1000);
    }
        */
}